<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <style>
      /* 填写样式 */
    </style>
  </head>

  <body>
    <!-- 填写标签 -->
    <script type="text/javascript">
        /**
         * 闭包，老闭包，嘶，怎么又是闭包，感觉做了很多了，
         * 这里我们可以看到返回的方法内部使用了函数partial的参数，
         * 也就是说当在外部再次调用fn，str1，str2和fn会使用之前调用partial函数传入的参部
         * 这样就相当于两次封装了这个函数，参数并不是一次传入
         */
      // 填写JavaScript
      const partial = (fn, str1, str2) => (str3) => fn(str1, str2, str3);

      // 测例
      var sayIt = function (greeting, name, punctuation) {
        return greeting + ", " + name + (punctuation || "!");
      };
     console.log(partial(sayIt, "Hello", "world")("!"));
    </script>
  </body>
</html>
